package reflect.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Java提供了一些元注解,常见的有:
 * 常见的元素范围:
 * 1.ElementType.TYPE:类、接口、枚举、注解
 * 2.ElementType.FIELD: 字段
 * 3.ElementType.METHOD: 方法
 * 4.ElementType.CONSTRUCTOR: 构造方法
 * 5.ElementType.PARAMETER: 参数
 * 6.ElementType.LOCAL_VARIABLE: 局部变量
 * ...
 */

/**
 * Retention注解:指定我们自己定义的注解的保留级别,有三个值:
 * 1.RetentionPolicy.SOURCE
 *   注解仅仅保留在源代码中,编译成字节码文件后就舍弃了;
 * 2.RetentionPolicy.CLASS[默认]
 *   保留在字节码文件中,但是JVM加载该类到JVM内部后被舍弃;
 * 3.RetentionPolicy.RUNTIME
 *   保留在运行时,JVM加载该类后依然保留,可以被反射机制访问;
 */
@Target(ElementType.TYPE)
//@Target({ElementType.TYPE, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoRunClass {
}





